package com.code.aicodemother.service;

import com.code.aicodemother.model.dto.ChatHistoryQueryRequest;
import com.code.aicodemother.model.entity.User;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import com.code.aicodemother.model.entity.ChatHistory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;

import java.time.LocalDateTime;

/**
 * 对话历史 服务层。
 *
 * @author ys
 */
public interface ChatHistoryService extends IService<ChatHistory> {
    /**
     * 添加对话消息
     *
     * @param appId      应用ID
     * @param message    消息内容
     * @param messageType 消息类型（user/ai）
     * @param userId     用户ID
     * @return 是否添加成功
     */
    boolean addChatMessage(Long appId, String message, String messageType, Long userId);
    /**
     * 根据应用ID删除对话历史
     *
     * @param appId 应用ID
     * @return 是否删除成功
     */
    boolean deleteByAppId(Long appId);

    /**
     * 获取查询包装类
     *
     * @param chatHistoryQueryRequest
     * @return
     */
    QueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);

    /**
     * 根据应用ID分页查询对话历史
     *
     * @param appId         应用ID
     * @param pageSize      每页数量
     * @param lastCreateTime 游标查询 - 最后一条记录的创建时间
     * @param loginUser     当前登录用户
     * @return 对话历史分页数据
     */
    Page<ChatHistory> listAppChatHistoryByPage(Long appId, int pageSize,
                                               LocalDateTime lastCreateTime,
                                               User loginUser);

    /**
     * 加载应用的对话历史到内存中
     *
     * @param appId      应用ID
     * @param chatMemory 对话内存
     * @param maxCount   最大加载数量
     * @return 实际加载的历史记录数量
     */
    int loadChatHistoryToMemory(Long appId, MessageWindowChatMemory chatMemory, int maxCount);
}
